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】:

只有两个库提供 lazyO(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的函数作图问题的主要内容,如果未能解决你的问题,请参考以下文章

怎么用mathematica算函数的最大值

matlab作图复制的时候怎么缩小空白的区域,如何把图片的边框减小?

mathematica中RandomReal和Table函数随机生成点问题求助

mathematica能绘制自定义函数曲线吗

如何用mathematica画出函数图象

mathematica求正负