当前位置:编程学习 > Matlab >>

matlab问题紧急求解!请哪位高手帮帮忙啊!

f1=diff(f,x1); f2=diff(f,x2); 其中f为很多因式相乘的二元函数(matlab无法完全显示表达式),f1与f2分别为其关于x1和x2的偏导。现要求的问题是: 令f1=0,f2=0,求其组成的方程组的数值解!求MATLAB代码或者方法!
追问:这个我们试过,可是我们的函数长度太长,matlab输出来的结果不完全,复制不了。所以还是解不了,这就是我们现在遇到的问题的关键所在。能不能在帮我们想一下,多谢咯!老兄,还是有错呀!
??? Error using ==> mupadmex
Error in MuPAD command: Out of memory

Error in ==> sym.sym>sym.mupadmexnout at 2003
        out = mupadmex(fcn,args{:});

Error in ==> solve at 76
[symvars,R] = mupadmexnout('mllib::solvefull',eqns,vars);

Error in ==> MaximumLikelihood at 18
[y1 y2]=solve(f1,f2);
答案:给你例子看看吧
syms x1 x2
f=x1^2+2*x2^2+6*x1*x2-8+(x1-6)*(x2-x1)*(x2+6)
f1=diff(f,x1)
f2=diff(f,x2)
[x1,x2]=solve(f1,f2,'x1','x2')
像这样简单的,可以使用solve直接求出来,但如果方程很复杂,solve是求不出来的,这是需要使用fsolve来数值求解了!
具体方法是
首先使用上面的方法求出两个导数,然后把他们复制出来,新建一个函数,写出函数文件,然后在使用fsolve求解
还拿上面的举例子
两个导数分别是
f1 =
 
2*x1 + 6*x2 - (x1 - 6)*(x2 + 6) - (x1 - x2)*(x2 + 6)
 
 
f2 =
 
6*x1 + 4*x2 + (x1 - 6)*(x2 + 6) - (x1 - x2)*(x1 - 6)
那么函数可写成
function main
x=fsolve(@(x)myfun(x),[10,-10])
x=fsolve(@(x)myfun(x),[1,-1])


function F=myfun(x)
 F=[2*x(1) + 6*x(2) - (x(1) - 6)*(x(2) + 6) - (x(1) - x(2))*(x(2) + 6)
6*x(1) + 4*x(2) + (x(1) - 6)*(x(2) + 6) - (x(1) - x(2))*(x(1) - 6)];

这样只能求出实根,不能求虚根

祝你学习愉快!
其他:最后插入一行
>> [y1 y2]=solve(f1,f2)
就可以了.
有什么疑问,继续讨论。。
满意请采纳!^_^ 

上一个:求助~~matlab程序!!!多变量灰色预测模型~
下一个:关于matlab数值优化问题,利用lsqcurvefit进行参数拟合

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,