您将如何在 SciLab 或 MatLab 中绘制这些图?我对这些很陌生,不知道该软件是如何工作的。请帮忙。
$Plot following functions with different colors in Scilab or MatLab
– f2(x) = logn
– f3(x) = n
– f4(x) = nlogn
– f5(x) = n2
– f6(x) = nj (j > 2)
– f7(x) = cn (c > 1)
– f8(x) = n!
where x = linspace(1, 50, 50).
嗯,其中很多都是内置函数。例如
>> x = linspace(1,50,50);
>> plot(x,log(x))
>> plot(x,x)
>> plot(x,x.*log(x))
>> plot(x,x.^2)
我不知道
nj (j > 2)
和cn (c > 1)
是什么意思。
对于最后一个,你应该看看函数
factorial
。
从上下文中不清楚您是否应该将它们绘制在不同的图表上或全部绘制在同一个图表上。如果都在同一张图上,那么您可以使用
>> hold on;
冻结当前轴 - 这意味着任何新线都将绘制在旧线之上,而不是绘制在一组新的轴上。
在 Matlab(可能还有 Scilab)中,您可以向
plot
函数提供“线规格”参数,该参数告诉它以什么颜色和样式绘制线。例如,
>> figure
>> hold on
>> plot(x,log(x),'b')
>> plot(x,x/10,'r')
>> plot(x,x.^2/1000,'g')
告诉 Matlab 将函数
f(x)=log(x)
绘制为蓝色,f(x)=x/10
绘制为红色,f(x)=x^2/1000
绘制为绿色,结果如下图:
我还不能发表评论或投票,但我想补充一下 Chris Taylor 的答案,即在 Scilab 中不使用
hold on
和 hold off
约定。所有绘图命令都会输出到当前轴,该轴始终“保持”。如果您想生成新图形或更改当前轴,您可以使用 figure(n)
,其中 n
可以是任何(非连续)正整数 - 实际上只是一个标签。
另请参阅
clf(n)
、gcf()
和 gca()
- Scilab 的图形处理与 Matlab 的有很大不同,尽管 matplotlib ATOMS 模块在某种程度上使 Scilab 的外观和行为更像 Matlab。
确保充分了解 scilab / matlab 函数处理的基本原理:
函数是一组数字之间的关系。对于每个 x 值,您最多有一个 y 值。例如,y=3x 的定义域为任意实数,范围为任意实数,这意味着 x=1 表示 y=3,x=0.002 表示 y=0.006,等等。
但是在 scilab 和 matlab 中,我们需要定义程序将 x 和 y 关联起来的每个数据点,即我们使用 discrete 数据,而 linspace 可以很好地做到这一点。因此,我们有一组有限的 x 值,我们打算为其获取 y 值。记住这一点很重要。这意味着如果我们将 x 指定为您提到的 linspace,则 x=0.1 不存在,并且 x 的“分辨率”或“微分步长”为 1(x 每个值以 1 变化 1)。
现在,如果您很着急,请查看我在每个部分中放置的代码。
在 scilab 终端中输入命令:
help functionName
结合谷歌搜索“scilab funcionName”或“scilab taskDefinition”将超级扩展您的自力更生学习 matlab 或 scilab。如果您急于使用帮助,请查看打开的窗口中提供的代码示例。为您推荐的命令:
help linspace
help plot
help log
help factorial
help for
help grid
对于 f2(x) = logn 我知道您打算绘制 log(n) 函数 = f2(n)。 要在 scilab 中声明 x 轴的多个值,以下解决方案将返回相同的离散数据线矩阵:
n = linspace(1,50,50);
或
x = 1 : 1 : 50;
您可以删除命令末尾的;来检查它的返回。
现在,开始绘图:
plot(log(n))
上面的代码使用 plot 函数将另一个函数的返回值作为参数传递(log),它本身接收您刚刚声明的变量 n 作为参数(如果您使用 linspace 命令行为例)。如果失败,也许您声明了 x 而不是 n 来接收 linspace 或值范围。
我建议你也尝试一下代码:
close //closes other opened graph window. All text after // is a comment and won't run
figure; //creates a graph window
subplot(2,1,1) // creates and selects an area in the figure handler
title("f(n) = log n")
plot(log(n)); //draws graph into available selected area. Auto-opens figure if necessary
subplot(2,1,2) //selects second area of blocks 2 rows vs 1 column to plot
title("f(n) = n")
plot(n);
我想上面的代码解决了 f2 和 f3 的问题。更简单的替代方案:
figure,
a=log(n);
plot(a)
figure,
plot(n)
对于 f4(n) = nlogn,你不能将行矩阵 n 和 log(n) 相乘,因此我们需要创建一个新的行矩阵并用 n*log(n) 的结果填充。
close //use this as much as you please, or manually close other windows
n=1:1:50;
a=log(n);
b=n;
f4=zeros(1,50) //I took the ; so you see the inintial result
for i=1:1:50 //for each i value from 1 to 50, incrementing i by 1 each time
f4(i) = a(i) * b(i); //each i data point of f4 becomes i data point from a multiplied by i data point from b
end
plot(f4)
对于 f6= nj (j > 2) 您没有指定 j,因此举个例子,如果 j(x) = sin(x),请尝试
close
x = 2:1:50; //defines range for x > 2
j = sin(x); //defines j in same range as sin(x values)
figure,
title("f6(n) = n*j, j=sin(n), {f6, n} > 2 ")
f6 = zeros(1,49);
for i=1:1:49
f6(i) = x(i)*j(i);
end
plot(f6)
xlabel("n") //use help xlabel if curious
ylabel("f6(n)")
f7 同样的想法。
对于 f8,您可能会使用
close
x = linspace(1, 50, 50);
f8 = factorial(x);
plot(f8)
您可能需要在那里进行缩放,或缩小林空间范围,因为阶乘值增长得非常快。
很有可能在 scilab 中定义了一些已知的数学函数(例如阶乘)。不过,我不知道这个函数,所以我在谷歌上搜索了“scilab 阶乘”。还可以尝试帮助。