matlab用fsolve得不到解啊,低手问题

方程组m文件如下:
function q=myfunn(p)
a=p(1);
b=p(2);
c=p(3);
d=p(4);
e=p(5);
syms x
q(1)=int(x^1*exp(a*x+b*x^2+c*x^3+d*x^4+e*x^5),x,-3,3)/int(exp(a*x+b*x^2+c*x^3+d*x^4+e*x^5),x,-3,3)+0.0472;
q(2)=int(x^2*exp(a*x+b*x^2+c*x^3+d*x^4+e*x^5),x,-3,3)/int(exp(a*x+b*x^2+c*x^3+d*x^4+e*x^5),x,-3,3)-0.9442;
q(3)=int(x^3*exp(a*x+b*x^2+c*x^3+d*x^4+e*x^5),x,-3,3)/int(exp(a*x+b*x^2+c*x^3+d*x^4+e*x^5),x,-3,3)+0.1419;
q(4)=int(x^4*exp(a*x+b*x^2+c*x^3+d*x^4+e*x^5),x,-3,3)/int(exp(a*x+b*x^2+c*x^3+d*x^4+e*x^5),x,-3,3)-2.5563;
q(5)=int(x^5*exp(a*x+b*x^2+c*x^3+d*x^4+e*x^5),x,-3,3)/int(exp(a*x+b*x^2+c*x^3+d*x^4+e*x^5),x,-3,3)+0.5687;
两个定积分之商等于一个常数,求解
fsolve('myfunn',[10,10,10,10,10]',optimset('Display','off'))

结果显示10个Warning: Explicit integral could not be found.
外加??? Undefined function or method 'full' for input arguments of type 'sym'.

Error in ==> trustnleqn at 28
Fvec = full(Fvec);

Error in ==> fsolve at 378
[x,FVAL,JACOB,EXITFLAG,OUTPUT,msgData]=...
请问这是我写的m文件的问题还是初值的问题还是这道题不能用fsolve?
高手如果觉得讲不清能不能留个q?小辈谢谢了

楼主是余海洋狼么?我觉得楼主不是低手呢,在百度混的都半斤八两哈哈。
我觉得你的方法挺牛的,只不过你的函数的返回值给q的是sym类型的,
在你的函数最后加个q=double(q);就能运行了
但是积分那步int函数会说算不出精确值,然后一直蹦Explicit integral could not be found.
感觉没办法,除非修改matlab源函数把它屏蔽了。。。
fsolve得运行停长时间做循环运算的,
我觉得它的option不如改成optimset('Display','on')
这样你每次循环能看到优化的cost function f(x)的收敛程度
我在主函数用的是fsolve('myfunn',[1,1,1,1,1]',optimset('Display','on'))
它会显示这种的:
Norm of First-order Trust-region
Iteration Func-count f(x) step optimality radius
0 6 65895.2 146 1
.....................
.....................
56 247 2.2224e-18 4.56686e-06 4.89e-07 0.202

Equation solved.
fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.
<stopping criteria details>
ans =
-0.0123
-0.5313
-0.0275
0.0025
0.0032

期间会有一堆因为符号积分运算不能给出具体表达式的警告Warning: Explicit integral could not be found.
请楼主无视它。。。
温馨提示:内容为网友见解,仅供参考
无其他回答

matlab用fsolve得不到解啊,低手问题
感觉没办法,除非修改matlab源函数把它屏蔽了。。。fsolve得运行停长时间做循环运算的,我觉得它的option不如改成optimset('Display','on')这样你每次循环能看到优化的cost function f(x)的收敛程度 我在主函数用的是fsolve('myfunn',[1,1,1,1,1]',optimset('Display','on'))它会显示这种的:...

matlab,小白想用fsolve解非线性函数总是报错,网上找了好多
若在使用MATLAB的fsolve函数求解非线性函数时遇到错误,可以尝试使用vpasolve函数求得精确解。vpasolve函数相较于fsolve在求解非线性方程组时,能够提供更准确的结果,尽管计算时间可能会稍长。具体求解步骤如下:首先,定义符号变量。对于这个问题,我们需要定义x1,x2,x3,x4,x5,x6,x7为符号变量。然后,...

matlab 用fsolve函数出错,求帮忙解决
1. 先创建一个函数,比如 function F = numel(x)F = [2*x(1) - x(2) - exp(-x(1));-x(1) + 2*x(2) - exp(-x(2))];2. 在主文件中使用fsolve函数求解numel(x)=0的解,单通常会给一个初始值,比如 x0 = [-5; -5]; % 各个变量的初始值,此处为两个变量x1, x2...

matlab用fsolve求解非线性方程组,无法求解……
给你看了,gf是matlab已有的函数名了,可输入help gf 查看,因此你定义了一个和gf函数重名的自己的函数,把gf随便改成另一个名字,如myfun,fsolve里也要改,不要跟matlab内置的函数重名,否则系统不识别哪一个是你想要求解的,这就叫机器与人脑的本质区别,调用结果如下:[xybest,fval]=fsolve('m...

matLab 中用fsolve问题遇到困难,求助!
每次都变化,你就先定义一个 function y = myfun(tao),global p_v p_B delta;...然后在用fsolve调用这个函数的时候,也先定义 global p_v p_B delta;然后再给他们赋值,全局变量,一变全变,函数内部也跟着变。

关于MATLAB中fsolve函数的问题》
m文件修改如下:function a=myfun(x)k=340;r=0.08;t=150\/365;c=29.8299;p=8.8335;a=blsprice(x(1),k,r,t,x(2))-[c,p];这样从语法上来说,不存在错误了;但是运行结果似乎找不到解,这就取决于:①这个模型是否有解,② 你给的初值是否在解的附近。

matlab fsolve解方程结果不对?
首先,我们要确保fsolve函数是否收敛到正确的解。可以通过观察求解过程中的退出标志(exitflag)以及确保使用的初始值是合理的。请在调用fsolve时返回exitflag,如下所示:options = optimoptions('fsolve','Display','iter');[x, fval, exitflag, output] = fsolve(@root8d, x0, options);这里,x0...

Matlab用fsolve求解非线性方程,卡了三四天了跪求帮助
fsolve的初值应该是用向量或者矩阵形式,而你用的元胞数组,可以调整下自己的未知数,将其改写为13乘3的矩阵。

用matlab编程求解方程组
求解方程组的运行结果找不到解的主要问题有:1、用fsolve函数求解的初值问题,解决的方法是通过调整获得。2、求和的问题,在调用myfun(x)时,始终在原地求解当i等于某值时的y值,而没有累加求和。按上述方法,修改后运行可求解得到 x1=-0.78894,x2=0.1253,f1=1.7053e-13,f2=1.6342e-13 ...

用matlab的fsolve解二元方程,但是总是出错,谁能帮我看看哪里出错了吗...
使用fsolve求解方程,未知数不能使用多个变量符号,而是应该把多个未知数写成一个向量。例如,对于你现在的两个问题,应该用x(1)表示x,x(2)表示y:>> f=@(x)[x(1)*2+3*x(2)+1;x(2)*2+4*x(1)+1];>> fsolve(f,[1 1])ans = -0.1250 -0.2500>> fun=@(x)([x(1)...

相似回答