matlab solve数值计算精度低,matlab中solve的用法

博客讨论了MATLAB在求解方程组时可能出现的精度问题,通过实例展示了当使用`solve`函数时,由于运算精度和复杂公式导致的结果失真。作者提出使用`simplify`和数值解法来提高结果准确性,并对比了MATLAB与Mathematica的运算结果。文章还提供了修正后的MATLAB代码,以避免解的严重失真。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

matlab中solve的用法

我的函数如下

function s=sss(p)

syms x y;

equation1=sym('c*x^2+c*x*y+(c*g-c*a-c*b+1)*x-a-e=0');

equation2=sym('d*y^2+d*x*y+(d*g-d*a-d*b+1)*y-b-f=0');

[x0,y0]=solve(equation1,equation2,'x','y');

a=p(1);

b=p(2);

c=p(3);

d=p(4);

e=p(5);

f=p(6);

g=p(7);

x0=eval(x0);

y0=eval(y0);

s=[x0 y0];

取一个特殊的p=[0 0 0.1 0.2 0 0 3]

这时应该有一个[0 0]的解,可是matlab算出来的里面没有

只有

q =

-0.0000 -8.0000

-8.0000 0 - 0.0000i

-8.0000 0 + 0.0000i

1个回答

分类:

综合

2014-11-08

问题解答:

我来补答

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 y

a=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的使用有关.

展开全文阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值