MATLAB中solve函数的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB中solve函数的问题相关的知识,希望对你有一定的参考价值。

先看一下:

>> NodeE

NodeE =

-20 12
9 4

>> distance

distance =

22.6525 13.4046
NodeE 和distance都是有值的,但我用solve函数解包括NodeE和distance的方程结时,却被看成是符号了,导致x1,y1等于一连串的表达式
>> [x1,y1]=solve('(x-NodeE(1,1))^2+(y-NodeE(2,1))^2=distance(1)^2','(x-NodeE(1,2))^2+(y-NodeE(2,2))^2=distance(2)^2','x,y')%这里NodeE被全看成符号了!

但是,把x1(1)的表达式复制了再运行,能得到结果

请问要怎样解决?

1、首先打开Matlab,直接在命令行输入solve函数,里面加上方程式,如下图所示,这里是一个二元一次方程。

2、接着直接回车就可以得到结果了,如下图所示。

3、然后solve函数中还可以写两个方程式,如下图所示。

4、回车后会得到两个未知数的解,如下图所示。

5、还可以先声明变量,然后编写方程式,并在solve中填入变量和方程式。

6、最后直接用点的方式得到答案即可,如下图所示。

参考技术A 这是由于matlab里面有个关于默认自变量规定问题
一般情况下默认自变量为表达式中距离x最近的字母
你可以用这种方法来求解
[x0]=solve('2600*(z0+15)=(z0-24985)*x1')
[z0]=solve('2600*(z0+15)=(z0-24985)*x1')
由于上两行行中只有X1与z0两个变量,而且X1与X较近,所以是求解x1
为了求解z0,可以用
[z0]=solve('2600*(z0+15)=(z0-24985)*x1','z0')
这样的话就没问题了
建议你指定代求变量
相关函数
findsym
查找自变量,比较有用
参考技术B 实际上 solve 函数默认的都把变量当作sym来运算

计算出来的结果都是sym对象。

为什么呢? 追去更高的准确度。

譬如solve('x=32/3')计算出来的是32/3 而不是小数

sym对象计算出来的是一个表达式, 而不是数值。

如果您想要得到数值结果的话,再用一个函数eval即可

[x1,y1]=solve('(x-NodeE(1,1))^2+(y-NodeE(2,1))^2=distance(1)^2','(x-NodeE(1,2))^2+(y-NodeE(2,2))^2=distance(2)^2','x,y');

x1=eval([x1]);
y1=eval([y1]);

参考资料:百度

本回答被提问者采纳
参考技术C 这样用肯定是不行的
可以这样用
syms
a
b
t=a+b
[a
b]=solve(t-4,'a-b=0')
注意t-4没有引号
参考技术D function
[x0,y0]=sss(a,b,c)
if
nargin
<1
a=0.26;
b=0.02;
c=0.15;
end
syms
x;
syms
y;
temp1=(x-a)^2+(y-b)^2-c^2;
temp2=1+y^1.5-x;
[x0,y0]=solve(temp1,temp2);
x0=eval(x0);
y0=eval(y0);

用Matlab的solve函数解方程组时如何限定某些参数为实数,某些参数为复数?使得对应的解只能为实数和复数?

我的意思是说使其在解出来的时候就是实数,而不是对解出来的复数取实部或虚部。

参考技术A real(ans)求结果实部,imag(ans)求结果虚部.

以上是关于MATLAB中solve函数的问题的主要内容,如果未能解决你的问题,请参考以下文章

matlab的solve函数得不到数值解

关于matlab solve函数的用法

matlab的solve函数限定解的范围

matlab中solve的用法

matlab中solve函数的用法。悬赏20分

MATLAB中solve函数最多解多少个方程