matlab 画函数问题,求详细过程
你好!
“数学之美”团员448755083为你解答!
你所描述的函数其实就是分形几何的Weierstrass函数,这是一个处处连续处处不可导的函数。
用matlab进行计算应包括两层循环。如图,计算时,我们取n=100,x的取值范围是-2到2,步长为0.0001,共40001个点,因为这个函数的主要目的是逐层放大看到其局部始终不可导的性质,步长不能太小,但是也不能太大,我自己机器上试验的步长比这小10倍,计算时间太长了。
要分析matlab的编程原理,看下图(实际我验证时取的是100)。
我们要绘制的是x的取值和f(x)的关系,而每个f(x)取值都是有100个横向的计算值相加得到的。因此matlab程序需要两层循环。
先写出程序再来解释:
a=0.5;
b=4;
n=100;
x=-2:0.0001:2;
for i=1:40001
f(i)=0;
for j=1:n+1
g(j)=a^(j-1)*cos(b^(j-1)*pi*x(i));
f(i)=f(i)+g(j);
end
end
我们先看内层循环,因为我们要用到g(j)这样表达,j是数组的序号,因此j不能为零,因此j取1到n+1,计算式内采取减1的方式。
再进行在进行内层循环之前,都先对f(i)幅值为零,然后,计算每一横行的值g(j),每次内层循环都重新赋值f(i),使得新的f(i)等于前值加上新算出来的g(j)
比如f(i)=0时,j=1,那么计算g(1)后,将0+g(1)赋值给f(i),然后进行下一次循环,j=2,计算出g(2)后,上次的f(i)=0+g(1),现在重新赋值0+g(1)+g(2)给f(i),一次类推,当j=n+1后,就可得到
f(i)=0+g(1)+g(2)+g(1)+g(2)+...+g(n-1)+g(n)
这样就通过内层循环求出了一个f(i),内层循环完毕后,外层循环使得i=i+1,使得接下来的计算幅值给f(i+1),且内层循环的x(i)取不同的值,然后再进行内层循环,求出f(i+1)。
画出的图如下
如满意请采纳加赞同!
如不满意请反馈追问!
PS:你的百度ID感觉很眼熟,是不是回答过你其他的问题了啊?
2024-08-07 广告
另外,我们用考虑n次部分和逼近级数,其余项不难看出小于|a|^(n+1)/1-|a|
可以使用余项来考虑误差的问题。
比如,误差为10^-6,则让|a|^(n+1)/1-|a|<10^-6求出n即可。
程序如下
a=0.945;
b=1.234;
n=1000;
%求多少次部分和,可以根据自己所给的误差来考虑
%次数不可太高,因为计算机有精度,毕竟不是人算
%太高的话数据溢出会导致问题!
x=-10:0.01:10; %x的范围,步长为0.05
format long
f=0;
for i=1:n
f=f+a^i*cos(b^i*pi*x); %叠加f
end
plot(x,f) %画出图形
Err=abs(a)^(n+1)/(1-abs(a)) %输出误差值
为什么图像化出来啥也没有。。这个图像我确定在X在-2到2区间内是连续且值域在-2到2的啊。。还有,这个确实-11+pi/2..