matlab solve的用法

问题描述:

matlab solve的用法
已知x,y都是10*100的矩阵.现在想用下面的语句确定函数参数a,b,c.但是求不出来.请问如果下面的语句有错应该怎么改呢?
for z=1:10
x1=x(z,1);
x2=x(z,50);
x3=x(z,100);
y1=y(z,1);
y2=y(z,50);
y3=y(z,100);
[a,b,c]=solve('y1*(x1*a+b)=c*x1','y2*(x2*a+b)=c*x2','y3*(x3*a+b)=c*x3');
end
1个回答 分类:数学 2014-11-30

问题解答:

我来补答
matlab的运行结果是:        0            -8.0000            -8.5000 - 0.8660i  -0.0000 + 0.0000i  -8.5000 + 0.8660i  -0.0000 - 0.0000i上面的结果自身就是不正确的,我分析的原因是:matlab先求出了解析解,接着代入系数值,由于matlab运算精度低,系数又太多,公式极其复杂,从而导致结果失真过于严重mathematica运行结果显示:mathematica先求出解析解,接着精确代入系数值计算,也出现了数量级为-16的误差,有部分失真,但是这个失真很容易发现,而得到修正mathematica执行消去y的运算结果显示原方程组只能由三组解借助mathematica的结果分析,可以得出:matlab的运行结果中,并没有丢失一组解,而是解的失真太为严重达到了0.1,可以用下面的程序执行数值function s=sss(p) syms x ya=p(1); b=p(2); c=p(3); d=p(4); e=p(5); f=p(6); g=p(7);a1=simplify(c*x^2+c*x*y+(c*g-c*a-c*b+1)*x-a-e);a2=simplify(d*y^2+d*x*y+(d*g-d*a-d*b+1)*y-b-f); [x0,y0]=solve(a1,a2);s=[x0 y0] 这个程序运行速度快且结果准确,结果为[   0,   0][   0,  -8][ -13,   0]注:可以看到新的程序输出结果是矩阵形式,而老程序的输出不是,问题很可能和eval的使用有关.
再问: 没太理解,simplify那句是什么意思 ?
 
 
展开全文阅读
剩余:2000
上一页:hfftbjhg