作业帮 > 综合 > 作业

matlab解高次方程组的问题,

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/22 22:35:26
matlab解高次方程组的问题,
有一组方程组需要求数值解
'w1+w2+w3=1',...
'w1*x1+w2*x2+w3*x3=7/12',...
'w1*x1^2+w2*x2^2+w3*x3^2=5/12',...
'w1*x1^3+w2*x2^3+w3*x3^3=13/40',...
'w1*x1^4+w2*x2^4+w3*x3^4=4/15',...
'w1*x1^5+w2*x2^5+w3*x3^5=19/84')
里面x1,x2,x3,w1,w2,w3均是变量
我试着用solve函数解,结果出现了复数解
后来尝试用fsolve来求解,
f=@(x)(['x(4)+x(5)+x(6)-1',...
'x(4)*x(1)+x(5)*x(2)+x(6)*x(3)-7/12',...
'x(4)*x(1)^2+x(5)*x(2)^2+x(6)*x(3)^2-5/12',...
'x(4)*x(1)^3+x(5)*x(2)^3+x(6)*x(3)^3-13/40',...
'x(4)*x(1)^4+x(5)*x(2)^4+x(6)*x(3)^4-4/15',...
'x(4)*x(1)^5+x(5)*x(2)^5+x(6)*x(3)^5-19/84'])
x=fsolve(f,[0.25 0.5 1 1/3 1/3 1/3])
结果可能因为初值选不恰当总是求不出解来,
"我试着用solve函数解,结果出现了复数解"
如果solve能解出全部的解的话,从里面取实数解就好了.不用理会复数解.
对于高次方程,6个方程是不能唯一确定一组解的.
再问: 准确的说用solve解出来只有复数解,而且那个复数解的结果式子在matlab单自动换行都换了4行,根本不是人能看的....

我是想问用fsolve函数能不能有数值解,比如给结果定格范围,初值再怎么约束下什么的,或者有没有别的函数方法能用来解
再答: 感觉这个方程很诡异,是关于x = [x1 x2 x3]的五次范德蒙矩阵乘以一个向量w= [w1 w2 w3].'得到一个结果。感觉更直观的思路是遍历x的解空间,然后对每一组给定的x试图求解w。程序如下:
clear all; close all;
V = @(x) [ones(3,1), x, x.^2, x.^3, x.^4, x.^5].';
b = [1 7/12 5/12 13/40 4/15 19/84].';
x0 = [0.1167 0.5974 0.9277].'; % 随机生成的一组初值
x = x0;
options = optimoptions(optimoptions(@fminunc),'Display','off');
for k = 1:100
    x1 = x; 
    V1 = V(x1);
    w = V1 \ b;
    res = norm(V1*w-b);
    x = fminunc(@(x) norm(V(x)*w-b) , x1, options);
end
min_res = res % 残差的二范数
min_x = x1 % 求解得到的x
min_w = w % 求解得到的w目前的运行结果是:min_res =
   5.6617e-04

min_x =
    0.1464    0.5940    0.9278

min_w =
    0.2302    0.4934    0.2764
再问: 额,其实在追问你时候我找到解决方法了:
用solve函数解出复数的符号解的时候再加个subs变成数值解
最后出现的解的结果的虚数部分全是0.0000i,这样就可以直接取实数解了,虽然还是不明白最初的符号解为什么会出现极其复杂的复数形式。