Mathematica的函数作图问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mathematica的函数作图问题相关的知识,希望对你有一定的参考价值。
我想用Mathematica作图,比如要花一系列的函数图像y=ax^2+bx,其中参数a,b可变,怎样可以能够让a,b像C语言的宏定义那样,改变值之后就能让函数图像相应地改变呢?我不是要让许多函数图像画在一个坐标系里。其实主要原因是函数表达式太复杂,一个个地代入麻烦,以上只是为了方便说明而已。
用下面的表达式就可以实现:
有附图
Manipulate[Plot[a*x^2+b*x,x,-10,10,PlotRange->All],
a,1,-10,10,1,b,1,-10,10,1]
简单说一下:
x,-10,10就是做图显示的横轴的范围,如果你愿意可以更改它的范围;
a,1,-10,10,1,b,1,-10,10,1这段就是你想要的参数a,b可变的部分,你可以在Manipulate面板上手动或者自动改变它的值,同时观察相应的函数图形变化。
a,1,-10,10,1的意识是说初始图像a的默认值是1,可变动的范围是-10到10,变动的间距是1,也即是说a在这里取-10到10之间的整数。当然你可以自己调整a范围。如果你把最后那个1省略掉,a,1,-10,10,a的取值范围就是-10到10之间的实数。
具体你可以参看Manipulate的说明文档。
参考资料:http://reference.wolfram.com/mathematica/ref/Manipulate.html?q=Manipulate&lang=en
参考技术A f[a_, b_] := Plot[a*x^2 + b*x, x, -10, 10]如上所写,定义一个关于a,b的函数,x的范围可以改变的,然后只要以f[a,b]这样的形式输入你要画的图的a,b值,就能得到所要的图了
如果楼主还有问题,再交流啊~~~~ 参考技术B Manipulate命令可以实现你的愿望。具体用法参阅帮助文档。 参考技术C 看看输入输出相关的知识,可以人为干预a b 的值
具体你可以去学问社区下载个教程等就可知道
C++ 中 Mathematica 的 Range[] 函数等价于啥?
【中文标题】C++ 中 Mathematica 的 Range[] 函数等价于啥?【英文标题】:What's the equivalent to Mathematica's Range[] function in C++?C++ 中 Mathematica 的 Range[] 函数等价于什么? 【发布时间】:2012-12-17 03:39:18 【问题描述】:Mathematica 有一个名为 Range[]
的函数,它执行以下操作:
Range[0, 10]
Range[-10, 0]
它打印的蚂蚁:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0
C++有这样的功能吗?
【问题讨论】:
裸 C++?没有。第三方库?是的。 使用纯 C++ 我只能通过声明一个函数来实现,对吧? 更好的是,按照给出的答案。它们经过更多测试,通常比洁净室功能或类更安全。std::iota
在这里工作得很好。
@chris Mentioning std::iota
会是一个很好的答案!
【参考方案1】:
标准库中没有,但来自boost::range
:
#include <iostream>
#include <iterator>
#include <boost/range/irange.hpp>
#include <boost/range/algorithm/copy.hpp>
int main()
boost::copy(boost::irange(0, 11),
std::ostream_iterator<int>(std::cout, " "));
输出: 0 1 2 3 4 5 6 7 8 9 10
【讨论】:
【参考方案2】:创建一个似乎很容易。
std::vector<int> range(int from, int to)
std::vector<int> result;
result.reserve(to-from+1);
for (int i = from; i <= to; ++i)
result.push_back(i);
return result;
【讨论】:
这不适用于问题的第二种情况,我相信你知道,但我想也许其他人不会。 @Ben:当然会。是什么让你认为它不会? 糟糕,我将第二种情况读作 [0 -10] 你是完全正确的。我很抱歉。【参考方案3】:为了完整起见,以下是使用 C++11 标准库和 lambdas 的方法:
vector<int> v;
int counter = -3; // The initial value
generate_n(
back_inserter(v) // Where to insert
, 10 // how many items
, [&counter] () -> int return counter++; );
这是link to ideone with a demo。
【讨论】:
【参考方案4】:只有两个库提供 lazy 和 O(1) 内存数值范围:
Boost irange - 仅积分;没有负面步骤(?);不能分配给其他容器。 RO numeric_range - 需要 C++11使用SCC (C++ REPL) 和 RO:
scc 'range(0,10)'
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
scc 'range(-10,0)'
-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0
【讨论】:
以上是关于Mathematica的函数作图问题的主要内容,如果未能解决你的问题,请参考以下文章
matlab作图复制的时候怎么缩小空白的区域,如何把图片的边框减小?