MATLAB:使用 fminsearch() 时出错

MATLAB : Error using fminsearch()

clc; clearvars; clear all;
syms T; syms E; syms v1; syms v2; syms v3;
assume(v1>0 & v1<50000);
assume(v2>0 & v2<50000);
assume(v3>0 & v3<60000);
b = 10/60;
fun = int(exp(-E/(8.314*T)),T,300,T);
s1 = 175.6 * 10^3;
fun11 = (1/(v1*sqrt(2*pi)))* exp(- ((E-s1)^2)/(2*v1^2));
a1 = 10^14.52;
fun12 = int(exp((-a1/b)*fun)*fun11,E,s1-3*v1,s1+3*v1);
alpha1 = 1 - fun12;
s2 = 185.4 * 10^3;
fun21 = (1/(v2*sqrt(2*pi)))* exp(- ((E-s2)^2)/(2*v2^2));
a2 = 10^13.64;
fun22 = int(exp((-a2/b)*fun)*fun21,E,s2-3*v2,s2+3*v2);
alpha2 = 1 - fun22;
s3 = 195.4 * 10^3;
fun31 = (1/(v3*sqrt(2*pi)))* exp(- ((E-s3)^2)/(2*v3^2));
a3 = 10^13.98;
fun32 = int(exp((-a3/b)*fun)*fun31,E,s3-3*v3,s3+3*v3);
alpha3 = 1 - fun32;
alpha = (alpha1 + alpha2 + alpha3)/3
alphaexp=[0.01134 0.04317];% 0.06494 0.08783 0.17053 0.32533 0.49142 0.55575 0.59242 0.6367 0.678 0.71621 0.75124 0.78442 0.81727];
T = [350 400]; %T = [350:50:1050];
minfunc = (subs(alpha)-alphaexp).^2
error1 = sum(minfunc)
error = matlabFunction(error1)
[xfinal,fval] = fminsearch(@(x)error(x(1),x(2),x(3)),[4300 3500 32000])

上面的代码产生一个错误,指出 'E' 是一个未定义的函数或变量。然而,在所有积分(fun12、fun22 和 fun 32)中,我已经明确指出积分是在变量 E 上进行的,极限分别包含 v1、v2 和 v3。 (所以 E 甚至不应该存在于最终的误差函数中)。

我是不是在执行 fminsearch 函数时出错了? 任何帮助将不胜感激。

它甚至没有达到最小搜索量。问题在于集成。

看起来 Matlab 无法计算闭合形式(尽管错误并不是真正的描述性错误)。

你可以通过这样做来重现你的这个。

error = matlabFunction(error1)
error(4300, 3500, 32000)

一个缓慢的解决方法是手动替换,然后用数值计算你的解决方案:

vpa(subs(error1,[v1,v2,v3],[4300 3500 32000]))

瓶颈在代入。我想有一些方法可以将 vpamatlabFunction 结合起来使这一切更快,但我不知道。