我正在尝试解决形式
的积分方程 Integrate[f(x)*g(x,w),dx]
Solve for w: ------------------------ = 0.5
Integrate[f(x),dx]
其中有一定的限制(数值积分)。
在这个和mathworks网站上搜索我发现了一些使用函数函数来完成它的代码。我遇到了一些问题:
目前的代码是(测试的简化方程式):
function [bfound]=testingSolveIntegral
options = optimset('MaxFunEvals',50);
bfound = fsolve(@func2minimize,[1 2 3],options); %testing start points at 1,2,3
function output = func2minimize(w)
t0 = -1;
t1 = 1;
L = 0.5;
output = (L - (integral(@myFunc,t0,t1,'ArrayValued',true,'RelTol',1e-30,'AbsTol',1e-30)./integral(@myFunc2,t0,t1,'ArrayValued',true,'RelTol',1e-30,'AbsTol',1e-30)));
function f = myFunc(muu)
f = B.*muu.^2*(w.*muu.^2);
end
function f2 = myFunc2(muu)
f2 = B.*muu^2;
end
end
end
这非常有效,但我想要做的是在循环中针对不同的B值求解这些方程,例如,B = 1:1:100。我在这段代码中尝试了一些东西,但只得到错误。
我是否需要从一个指示B循环的外部脚本调用此函数?
我还想在这个外部脚本中定义我的函数,例如:
func = @(muu) B.*muu.^2*(w.*muu.^2);
func2 = @(muu) B.*muu^2;
for B = 1:1:100
testingSolveIntegral(func,func2,B)
我已经尝试了一些东西,但是在这个地方飞来飞去的大量功能中迷失了。非常感谢有关如何设置此类脚本的帮助。 感谢
答案 0 :(得分:0)
integral doc页面告诉您如何执行此任务(“集成参数化函数”部分)。
首先使用与参数/变量一样多的参数定义函数f
和g
。例如,定义:
g = @(muu,w) muu.^2*(w.*muu.^2);
f = @(muu) muu.^2;
然后使用匿名函数调用integral
,该函数修复参数的值:
for w=1:100
q(w) = integral(@(x) g(x,w).*f(x),bmin, bmax)./integral(f,bmin, bmax);
end