转自:http://www.chinavib.com/thread-42369-1-1.html
有不少人常问带参数的积分问题该如何处理,现举一个例子,希望能起到抛砖引玉的作用.
%%%-------------------------------------------------------%%%
例如以下问题:
函数为 y=sin(k.*x).*x.^2,对x积分,
积分区域为【1,5】,目的是要画 k 和 y 的图形.
%%%==============================%%%
%%% 作k的一个循环, k作为 inline函数的参数即可.
clear all
k=linspace(0,5);
for i=1:length(k)
kk=k(i);
fun=strcat('sin(',num2str(kk),'*x).*x.^2');
y(i)=quadl(inline(fun),1,5);
end
plot(k,y)
%%%==============================%%%
第一种是利用匿名函数(Anonymous Function),第二种是利用内嵌函数(Nested Function)
方法一:
clear all
kk=linspace(0,5);
y=zeros(size(kk));
ff=@(k) ['sin(',num2str(k),'*x).*x.^2'];
f=@(k) quadl(ff(k),1,5);
for ii=1:length(kk)
y(ii)=f(kk(ii));
end
plot(kk,y)
方法二:
新建m文件
function y=shuzhijifen(k)
function f=f(x)
f=sin(k.*x).*x.^2;
end
y=quadl(@f,1,5);
end
保存之,然后运行
clear all
kk=linspace(0,5);
y=zeros(size(kk));
for ii=1:length(kk)
y(ii)=shuzhijifen(kk(ii));
end
plot(kk,y)
方法一:
clear all
k=linspace(1,5);
for i=1:length(k)
kk=k(i);
fun=['sin(',num2str(kk),'*x).*x.^2'];
y(i)=quadl(inline(fun),1,5);
end
plot(k,y)
方法二:
clear all
k=linspace(1,5);
for i=1:length(k)
kk=k(i);
fun=inline(subs('sin(k*x)*x^2','k',kk));
y(i)=quadl(fun,1,5);
end
hold on;
plot(k,y,'r')