matlab 画函数问题,
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/06 05:23:00
matlab 画函数问题,
函数如下:f(x)=西格玛(n=0到正无穷)a^n×cos(b^n×派×X),其中a,b为已知常数,如何做?具体代码.
函数如下:f(x)=西格玛(n=0到正无穷)a^n×cos(b^n×派×X),其中a,b为已知常数,如何做?具体代码.
“数学之美”团员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感觉很眼熟,是不是回答过你其他的问题了啊?
你所描述的函数其实就是分形几何的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感觉很眼熟,是不是回答过你其他的问题了啊?