网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月24日漏签0天
mathematica吧 关注:19,808贴子:73,843
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 6回复贴,共1页
<<返回mathematica吧
>0< 加载中...

[提问]关于程序包和替换

  • 只看楼主
  • 收藏

  • 回复
  • 大灰熊
  • 还分不清
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
现在我有一自定义函数是这样的:
VectorsOfOnePoint[f_,g_,m_]:=(Module[{s1,s2,s3,r1,r2,x0,y0,z0,s},
s1[s_]:=ReplaceAll[f,{x->x0[s],y->y0[s],z->z0[s]}];
s2[s_]:=ReplaceAll[g,{x->x0[s],y->y0[s],z->z0[s]}];
Print[s1[s]];
Print[s2[s]];
......(注释掉无关部分)
])
当我把这段程序放在程序包中载入时,输入
VectorsOfOnePoint[x^2 + y^2 == 1, y + z == 0, {0, -1, 0}]
结果出来的是这个

但我实际上想要把x,y,z替换成x0[s],y0[s],z0[s],很明显这个程序并没有这样做.
但当我把它单独拉出来在笔记本里面重新定义再运行一遍时,它就是正确的我想要的结果

所以我应该如何修改程序包里面的程序?


  • 大灰熊
  • 还分不清
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
而且偏导那边也有问题.
当我把程序改成这样:
VectorsOfOnePoint[f_,g_,m_]:=(Module[{t,r1,r2},
(*....无关部分注释掉*)
Print[f];
Print[D[f,s]];
(*....无关部分注释掉*)])
运行
VectorsOfOnePoint[x[s]^2 + y[s]^2 == 1, y[s] + z[s] == 0, {0, -1, 0}]
发现程序的输出是这样的
但是我继续把它单独拉出来在笔记本里面重新定义再运行一遍时,就对了

当然我直接对这个f求偏导,产生的结果就是应该这样的
那么现在又是哪里不对了呢


2025-05-24 09:37:18
广告
  • xzcyr
  • 吧主
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
……你没把完整代码给出来我也没法百分百肯定。不过,你是不是把上下文的事忘了?或者说,你现在并不清楚程序包中的BeginPackage和Begin是干什么用的?一个可以重现你的问题的简例:
BeginPackage["test`"]
help::usage = "Just for fun"
Begin["`a`"]
help[f_] := f /. x -> 1
End[]
EndPackage[]
查一查help的定义就足以看出玄机了:

直接写在笔记本里的x默认上下文是Global,所以,不会顺利执行。
顺便,个人不建议在基础不稳固的情况下就去折腾程序包。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 6回复贴,共1页
<<返回mathematica吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示