作业帮 > 数学 > 作业

MATLAB二重参数积分求最小值

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/05/19 01:36:27
MATLAB二重参数积分求最小值
clear
clear all
syms x y a b;
Q = cos(0.212*y).*besselj(0,0.2405*x).*exp(-a*x.^2).*exp(-b*y.^2);
Dx1 = diff(Q,x);
Dy2 = diff(Q,y,2);
DxxDx = diff(x.*Dx1,x);
fxy = (Q.*(-19.*(1./x.*DxxDx+Dy2)-2654.*Q./sqrt(x.^2+y.^2)))./Q.^2;
f = eval(['@(x,y)' vectorize(fxy)]);
B = @(a,b)dblquad(fxy,-4.9999,5,-10,10);
[mx,minf]=randwalknew(B,[0.3,0.5],0.5,0.1,10,1)
单独积分计算很好
单独求最小也不错
但结合不好
这3行肯定有错:
f = eval(['@(x,y)' vectorize(fxy)]);
B = @(a,b)dblquad(fxy,-4.9999,5,-10,10);
[mx,minf]=randwalknew(B,[0.3,0.5],0.5,0.1,10,1)
意思难说了,可以试一下:
fxy = eval(['@(x,y,a,b)' vectorize(fxyExp)]);
fab = @(a,b)integral2(fxy(x,y,a,b),-4.9999,5,-10,10);
[mx,minf] = randwalknew(fab,[0.3,0.5],0.5,0.1,10,1)
randwalknew是你自己写的吧?
再问: 也觉着这有错,应该是变量的问题 搞不懂 randwalknew是一本书上的,这绝对没错的。
再答: 你运行过我的代码了吗?
我没randwalknew,没法运行。
再问: 私信了,这个有长度限制
再答: %完整程序
clear
clc
syms x y a b
Q = cos(0.212*y).*besselj(0,0.2405*x).*exp(-a*x.^2).*exp(-b*y.^2);
Dx1 = diff(Q,x);
Dy2 = diff(Q,y,2);
DxxDx = diff(x.*Dx1,x);
fxyExp = (-19.087*(1/x*DxxDx+Dy2)-2654*Q/sqrt(x^2+y^2))/Q ;
fxy = eval(['@(x,y,a,b)' vectorize(fxyExp)]);
fab = @(a,b)integral2(@(x,y)fxy(x,y,a,b),-4.9999,5,-10,10);
[mx,minf] = randwalknew(fab,[0.3,0.5],0.5,0.1,10,1)