分段函数的运算
mathematica吧
全部回复
仅看楼主
level 6
Shu_lty 楼主
新手请教一下,我这个程序里面的分段函数怎么实现不了啊?找了很久都不知道问题在哪,感谢各位啦!
q[\[Tau]_] :=
Piecewise[{{A + a*\[Tau], 0 <= \[Tau] <= A/a}, {2*A, A/a < \[Tau]}}];
a = 5*10^-4;
A = 100;
m = 0.2;P[t_] := Module[{M}, M = 10*m^2;
M*\!\(
\*SubsuperscriptBox[\(\[Integral]\), \(0\), \(t\)]\(\((
\*SuperscriptBox[\(5\), \(t - \[Tau]\)]*\(q'\)[\[Tau]])\) \
\[DifferentialD]\[Tau]\)\)]
t = Table[10^i, {i, 0, 10, 0.2}]
ft = P[t]
fig = ListPlot[Transpose[{Log10[t], ft}], PlotRange -> All,
Joined -> True, InterpolationOrder -> 3]
2020年06月12日 07点06分 1
level 7
ft里的数字会不会太大了亿点。。
2020年06月12日 08点06分 2
这是我按照我自己程序框架随便编的程序(意思都相同),我自己的程序跟分段函数无关的参数太多了,所以我就简化了一下,随便设置的一个函数
2020年06月12日 08点06分
关键是出不来结果啊,太头大了
2020年06月12日 08点06分
@Shu_lty 这里跑的数字太大了,我挨个挨个算到后面程序算不出来。
2020年06月12日 09点06分
@三炮快跑☞ 那我把函数重新定义一下,关键就是这个分段函数能计算出来
2020年06月12日 11点06分
level 6
Shu_lty 楼主
a = 5*10^-4;
A = 100;
m = 0.2;s[t_] := Piecewise[{{(1/2)^t*\!\(
\*SubsuperscriptBox[\(\[Integral]\), \(0\), \(t\)]\(\((
\*SuperscriptBox[\((
\*FractionBox[\(1\), \(2\)])\), \(\[Tau]\)]*
a)\) \[DifferentialD]\[Tau]\)\), 0 <= t <= A/a}, {0,
A/a < t}}];
P[t_] := Module[{M}, M = 10*m^2;
M*s[t]]
t = Table[10^i, {i, 0, 1, 0.2}]
ft = P[t]
fig = ListPlot[Transpose[{Log10[t], ft}], PlotRange -> All,
Joined -> True, InterpolationOrder -> 3]
2020年06月12日 14点06分 3
@Shu_lty 你这样相当于直接向s传入了一个列表,Piecewise不能直接计算整个列表。你可以把P[t]改成P /@ t,或者给s或P加上一个Listable的属性
2020年06月12日 15点06分
但是这个结果(图),还是分段函数的表达式,不知道为啥出不来连续的曲线图?
2020年06月12日 14点06分
嗯嗯,谢谢谢谢![大拇指][大拇指]
2020年06月13日 01点06分
或者也可以试试神奇的Simplify`PWToUnitStep函数。
2020年07月04日 03点07分
level 7
ft = P[t]这一句有问题。P是你自定义的函数,属性(Attributes)那一栏没有Listable的性质,不能像一些系统自带的函数那样去直接执行一个list。这样报错的内容是Tranpose的两个目标不是一样长,因为P[t]这里没执行。
可以在定义了P之后加上一句Attributes[P] = {Listable}, 或者像截图里这样改一下。
2020年06月12日 15点06分 4
哇哦,真是太给力了!![大拇指][大拇指][茶杯][茶杯],非常感谢!![玫瑰][玫瑰]
2020年06月13日 01点06分
额,实在不好意思,还是得请教一下,最后算的分段函数的拐点,不与定义的分段函数一致啊。试了好几次发现,拐点的横坐标均与t列表的间隔数字一样,这又是为啥啊[啊]
2020年06月13日 02点06分
level 6
Shu_lty 楼主
a = 5*10^-4;
A = 100;
m = 0.2;s[t_] := Piecewise[{{(1/2)^t*\!\(
\*SubsuperscriptBox[\(\[Integral]\), \(0\), \(t\)]\(\((
\*SuperscriptBox[\((
\*FractionBox[\(1\), \(2\)])\), \(\[Tau]\)]*
a)\) \[DifferentialD]\[Tau]\)\), 0 <= t <= A/a}, {0,
A/a < t}}];
P[t_] := Module[{M}, M = 10*m^2;
M*s[t]]
t = Table[10^i, {i, 0, 10, 2}]
ft = P[#] & /@ t
fig = ListPlot[Transpose[{Log10[t], ft}], PlotRange -> All,
Joined -> True, InterpolationOrder -> 3]
2020年06月13日 02点06分 6
没太能理解你说的拐点指的是啥?是分段函数前一段和后一段的分界点?
2020年06月13日 06点06分
level 6
Shu_lty 楼主
如图所示[疑问]
2020年06月13日 13点06分 7
感觉这个拐点的值等于t步长了...
2020年06月13日 13点06分
@Shu_lty 步数改成2后取得点变少了,ListPlot只是描点,Joined是在描出的点间连线,你改成1了后描得点多了,(原来跳过的点描了出来),连线后的样子自然就变了。你可以把步数改成0.1或者更小再看看。
2020年06月14日 13点06分
@三炮快跑☞ 嗯嗯,有道理!!但是我还遇到了一个比较恶心的问题:设置两个t函数,第一个里面有的参数是在第二个函数(设置了模块module)定义的,最后结果还是出不来...(而且模块里面应该不好再设置关于t的函数吧?)我把代码贴在下面,麻烦帮忙看一下,实在不好意思!不胜感激![泪]
2020年06月14日 15点06分
@三炮快跑☞ 还是麻烦您帮忙看一下,实在搞不定了,谢谢![狂汗]
2020年06月14日 15点06分
level 7
我没理解错的话,根据你说的,你大概是想在t函数里引用“全局”变量,而在第二个函数里希望Module能事先声明这个变量,好让你接下来这个函数里,引用t函数时他们成为你的“全局”变量?如果是这样的话系统不会这么执行的,你可以换个简单例子试下。建议要么在外面定义这些参数,要么把参数写成t函数的自变量,用的时候带进去就好了。
2020年06月14日 16点06分 10
嗯嗯,我再试试,实在抱歉哈,打扰这么久。谢谢![大拇指]
2020年06月15日 02点06分
1