24小时热门版块排行榜    

查看: 2848  |  回复: 10

zhenzhen5516

金虫 (小有名气)

[求助] 求助三元函数二阶偏微分C语言写法

求助三元函数二阶偏微分C语言写法,例如F=f(x,y,z),求 d2F/dxdy, d2F/dydz, d2F/dzdx之类的,步长可以简单的设为1。希望会的同学帮下忙,谢谢~~
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

你把算法直观地说一遍,我帮你写C语言要的不?

» 本帖已获得的红花(最新10朵)

漩涡的中心有一块空地,空空的。
2楼2011-08-31 12:59:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhenzhen5516

金虫 (小有名气)

送鲜花一朵
引用回帖:
2楼: Originally posted by huycwork at 2011-08-31 12:59:59:
你把算法直观地说一遍,我帮你写C语言要的不?

非常感谢!为了您方便看,我把算法上传到附件里了,麻烦您下载一下!只要您写出一项我应该就能明白了~
3楼2011-08-31 16:01:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)


余泽成(金币+1): 2011-09-01 15:42:43
引用回帖:
3楼: Originally posted by zhenzhen5516 at 2011-08-31 16:01:08:
非常感谢!为了您方便看,我把算法上传到附件里了,麻烦您下载一下!只要您写出一项我应该就能明白了~

呃,你太客气了……
我记得偏微分好像是常规微分在各个方向上微分之和,但你给出的符号都是啥意思呃?哪些是函数,哪些是变量,k是什么意思,各个函数跟哪些相关变量相关,那个下三角的意思又是什么呢?中括号括起来的参数xyz又是什么意思?这些还是要说清楚的嘛!
漩涡的中心有一块空地,空空的。
4楼2011-09-01 09:12:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhenzhen5516

金虫 (小有名气)

引用回帖:
4楼: Originally posted by huycwork at 2011-09-01 09:12:31:
呃,你太客气了……
我记得偏微分好像是常规微分在各个方向上微分之和,但你给出的符号都是啥意思呃?哪些是函数,哪些是变量,k是什么意思,各个函数跟哪些相关变量相关,那个下三角的意思又是什么呢?中括号括 ...

哦,可能是我没说清楚。函数是u1=u1(x,y,z), K 是常量,u只是x y z的函数,下三角是二次微分算子,具体的我另上传了一个附件,可供参考~谢谢,等待您的回复
5楼2011-09-01 10:07:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★ ★
余泽成(金币+3): 谢谢参与应助! 2011-09-01 15:42:56
引用回帖:
5楼: Originally posted by zhenzhen5516 at 2011-09-01 10:07:43:
哦,可能是我没说清楚。函数是u1=u1(x,y,z), K 是常量,u只是x y z的函数,下三角是二次微分算子,具体的我另上传了一个附件,可供参考~谢谢,等待您的回复

我大概知道你的困难了,你看是不是这样:
混合偏导数的定义式df/dxdy = d(df/dy)/dx,df/dy部分返回一个函数,而C语言没有直接支持返回带参函数的机制。
如果是这样的话,你可以自己实现闭包函数即可。比如说返回3x+4,一般情况下,需要先定义函数:
CODE:
double func(double a, double b, double x){
    return a*x+b;
}

如果需要返回这样一个函数,那等于说要返回这个:func(3, 4, x),如果用C++就有很明显的解决方法,C的解决方案也很简单,就是自己捆绑数据:
CODE:
typedef struct{
    double a, b;
    double (*func)(double a, double b, double x);
} CFunc;
CFunc *factory(double a, double b){
    CFunc *f = malloc(sizeof(CFunc));
    f->a = a;
    f->b = b;
    f->func = func;
    return f;
}
double caller(CFunc *fc, double x){
    return fc->func(fc->a, fc->b, x);
}

实现混合偏微分就是将偏微分实现为函数,df/dy返回一个CFunc,df/dxdy也返回一个CFunc即可。
漩涡的中心有一块空地,空空的。
6楼2011-09-01 10:45:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhenzhen5516

金虫 (小有名气)

引用回帖:
6楼: Originally posted by huycwork at 2011-09-01 10:45:05:
我大概知道你的困难了,你看是不是这样:
混合偏导数的定义式df/dxdy = d(df/dy)/dx,df/dy部分返回一个函数,而C语言没有直接支持返回带参函数的机制。
如果是这样的话,你可以自己实现闭包函数即可。比如说返 ...

呃,非常感谢您的详细回复。不过我没太看明白,其实我的问题就是df/dxdy = d(df/dy)/dx如何在程序里写进去,比如df2/dx2(表示函数F对x的二次微分)可以在程序里简单写成f(x+1,y,z)+f(x-1,y,z)-2f(x,y,z),那么d(df/dx)/dy可以写成 f(x,y,z)-f(x-1,y,z)-f(x,y-1,z)+f(x-1,y-1,z)或者其他什么形式呢?呃,说了这么多也不知道您明不明白我的问题,这是不是属于数学问题啊?晕了。。。
7楼2011-09-01 11:33:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★
余泽成(金币+2): 鼓励应助! 2011-09-01 15:43:06
引用回帖:
7楼: Originally posted by zhenzhen5516 at 2011-09-01 11:33:37:
呃,非常感谢您的详细回复。不过我没太看明白,其实我的问题就是df/dxdy = d(df/dy)/dx如何在程序里写进去,比如df2/dx2(表示函数F对x的二次微分)可以在程序里简单写成f(x+1,y,z)+f(x-1,y,z)-2f(x,y,z),那么d( ...

你没看明白我说的东西。你试试一些支持lambda表达式或者闭包的语言可能更能理解一些。
数学里面的函数完成的是一个映射,对应到C语言就是一个叫做函数的过程。两者的概念是一致的,即完成某种映射,但是C语言函数是一种函数过程形式,不能当做实体来用。就像火一样,你不能单独把火隔离出来,必须从木柴开始,拿走木柴,火才能跟着走。
你这样的求导问题,是对函数实体的作用过程,函数要当做实体来用,比如说ax^n+b的求导,求导是一个过程,函数本身却是一个参数,求导完成的是一个ax^n+b->anx^(n-1)的映射,定义域是函数实体,或者说是n-1阶导数,值域也是函数实体,或者说是n阶导数。
于是应该改变的一个观念就是,函数本身也该是一个数据,函数包含执行属性。
当然你说的要用数学另外的方式去求导终究还是要回归到这一点,n阶导数需要对n-1阶导数当做数据来求导,导数定义本身就说明了这一点。
你说的这种实际上需要转换成这样的表示:
CODE:
Func: f(x, y, z);
Funcx: df/dx = Func(x+dx, y, z) - Func(x, y, z)   / dx;
Funcy: df/dy = Func(x, y+dy, z) - Func(x, y, z)   / dy;
Funcz: df/dz = Func(x, y, z+dz) - Func(x, y, z)   / dz;
Funcyx: Funcy/dx = Funcy(x+dx, y, z) - Funcy(x, y, z)  / dx;
Funczy: Funcz/dy
Funcxz: Funcx/dz

设计好你需要的函数对象即可。

» 本帖已获得的红花(最新10朵)

漩涡的中心有一块空地,空空的。
8楼2011-09-01 13:53:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★
余泽成(金币+2): 辛苦了! 2011-09-01 15:43:33
要想你说的那种简单形式,有两点不好,第一个是扩展性不好,每种导数都需要设计一个求值方式,3阶混合导数,由于存在df/dxdy,df/dxdz,df/dydz,df/dydx,df/dzdy,df/dzdx六种形式,就需要设计六个形式,即3*2种形式,如果参数增多,比如5个参数,就有5*4种。另外,计算机本身完成的是离散量的运算,数值运算本身就不是精确的,这样更容易积累误差。一般形式也不是很复杂咯~
漩涡的中心有一块空地,空空的。
9楼2011-09-01 14:11:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhenzhen5516

金虫 (小有名气)

送鲜花一朵
引用回帖:
8楼: Originally posted by huycwork at 2011-09-01 13:53:10:
你没看明白我说的东西。你试试一些支持lambda表达式或者闭包的语言可能更能理解一些。
数学里面的函数完成的是一个映射,对应到C语言就是一个叫做函数的过程。两者的概念是一致的,即完成某种映射,但是C语言函 ...

嗯,真的非常感谢你,我想我明白了~~
10楼2011-09-01 14:16:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zhenzhen5516 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 国自然面上复盘~欢迎讨论 (金币+5) +12 晴天加油 2026-08-26 13/650 2026-08-28 11:32 by skyjudy
[基金申请] 基金系统什么内容也没有 30+4 winsaint 2026-08-27 9/450 2026-08-28 11:06 by maolC
[基金申请] 哪位高人中了,把查询到的截图贴出来让我看看,让我长长见识 +5 yuleib84 2026-08-26 6/300 2026-08-28 00:02 by yudaoqian88
[基金申请] 面上合作单位盖章 +5 ssyjh 2026-08-27 5/250 2026-08-27 20:50 by gdfollow
[基金申请] 基金未中,这种答复是模板吗? +5 zhaosm1982 2026-08-27 6/300 2026-08-27 16:00 by lfy8008
[基金申请] 怎么看青基中了没有啊 +5 叶九微 2026-08-26 5/250 2026-08-27 10:35 by l_zh2008
[基金申请] 为什么 国际(地区)合作与交流项目 没有放榜? 10+3 majunge000 2026-08-26 11/550 2026-08-27 08:42 by 北京莱茵编辑
[基金申请] 我不理解! +15 Edward_pc 2026-08-26 23/1150 2026-08-26 20:34 by zzuzxg
[基金申请] 2026年的国家社科基金项目通讯评审的新规则与新动向、新挑战 +7 process2012 2026-08-23 10/500 2026-08-26 19:23 by hmhminy
[基金申请] 系统查不到 +10 董八千 2026-08-26 10/500 2026-08-26 16:30 by Equinoxhua
[基金申请] 2026国自然函评费到账 +22 羊腰板 2026-08-21 25/1250 2026-08-26 15:00 by zuocuiping
[基金申请] 2026年8月25日国自然放榜前突然收到列入评审专家邮件,有关系吗? +25 木水思豆 2026-08-25 28/1400 2026-08-26 14:53 by draco1987
[基金申请] 出来了 +9 trojank 2026-08-26 9/450 2026-08-26 14:25 by 宝贝虫子
[基金申请] 国合里面能看到了 +7 一怀馨秋 2026-08-26 7/350 2026-08-26 11:23 by zhaosm1982
[基金申请] 国际合作可查了,中了面上 (EPI+1)(金币+50) +18 Ldrop2023 2026-08-26 18/900 2026-08-26 11:15 by cmrandy
[基金申请] 国合可查了 +3 paperzjh 2026-08-26 3/150 2026-08-26 10:41 by LemmonTr
[基金申请] 牛来!米来!面来! +8 beefly 2026-08-26 8/400 2026-08-26 08:37 by xuzhipiao
[基金申请] 在坚冰还盖着北海的时候,我看到了怒放的梅花。 (金币+10) +6 ziyangfang 2026-08-25 9/450 2026-08-25 20:26 by huagongfeihu
[基金申请] 如果此刻你正在为国基感到焦虑,不妨来听听这首《基金之外》 +8 scalable 2026-08-24 8/400 2026-08-25 12:52 by jnhyjjm
[教师之家] 跳槽后在研项目怎么办? +5 简单化xn 2026-08-22 10/500 2026-08-23 12:38 by 简单化xn
信息提示
请填处理意见