如果要求两个未知数,并且给定了两个矩阵方程,两个函数方程,要联立求解两个未知数的值,关于matlab使用fsolve和solve求解出现的情况进行分析,发现使用solve可以进行成功求解,但使用fslove进行求解出现错误,暂时没想到解决方法。
或者有新的方法可能没有了解到。
例题:
先给定一些参数:
两个矩阵
A1=[1 1 1;
2 2 4 ;
0 0 1]
A2=[5 3 1 ;
1 3 1 ;
0 0 1]
然后给出一个矩阵方程:【a;b;1]=A1*[x;y;1]//其中x,y是所要求的未知数,而a,b也未知但并非要求的值,在计算过程中会被x,y代替,
给出一个函数方程:b-a=x+2.*y;
[m;n;1]=A2*[x;y;1]//其中x,y是所要求的未知数,而m,n也未知但并非要求的值,在计算过程中会被x,y代替,(与a,b性质一样)
给出一个函数方程:m-n=x+2.*y;
解题思路:
a,b虽然也未知,但通过矩阵方程,可以把a,b都变成由x,y表示的函数,再将b-a=x+2.*y;中的a,b代换,得到x,y的一个函数方程。
同理对m,n进行相同处理,又得到一个x,y的函数,两个函数求解两个未知数,易得。
matlab编程
得到a,b,m,n关于x,y的表达式
A1=[1 1 1;2 2 4 ;0 0 1]
A2=[5 3 1 ;1 3 1 ;0 0 1]
syms x y
q=A1*[x;y;1]
p=A2*[x;y;1]
% q=[a;b;1]
% p=[m;n;1]
a=q(1)
b=q(2)
m=p(1)
n=p(2)
运行得到结果如下;
1.使用solve求解x,y
eq1=b-a-x-2.*y
eq2=m-n-x-2.*y
% 定义函数,
[x,y]=solve([eq1,eq2],[x,y])
% 使用solve求解
运行得到结果如下;
顺利求解出x=2,y=3。
2.使用fsolve求解
function y=fun(x)
y=[b-a-x(1)-2.*x(2);
m-n-x(1)-2.x(2) ];
end
% 定义函数,
x0=[0 0]
opts=[]
x=fsolve(@funm,x0,opts)
% 进行求解
运行得到结果如下;
报错,
函数或变量 'b' 无法识别。
那肯定a,b,m,n、都无法识别。
注:我明明定义的b是x,y的函数了但是运行无法识别说明要么定义方式不对,要么要进行其他操作来识别b这个变量,查询了一些资料没找到比较相关的原因解释,如果有读者阅读文章知道原因告知一下,谢谢