24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 2473  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 0703求调剂383分 +9 W55j 2026-04-03 9/450 2026-04-06 06:50 by houyaoxu
[考研] 272分求调剂 +4 wangyile2233 2026-04-02 4/200 2026-04-05 22:21 by 286640313
[考研] 调剂 +5 好好读书。 2026-04-01 5/250 2026-04-05 17:54 by liucky
[考研] 材料专硕 调剂 +14 CXN123456 2026-04-03 14/700 2026-04-05 17:18 by Hdyxbekcb
[考研] 270分求调剂 +4 maxjxbsk 2026-04-01 4/200 2026-04-05 17:04 by yulian1987
[考研] 081700学硕,323分,一志愿中国海洋大学求调剂学校 +16 披星河 2026-04-04 16/800 2026-04-05 11:27 by 猪会飞
[有机交流] 甲醇/二氯 1:15过柱子 5+3 a哎y呦w喂 2026-03-31 3/150 2026-04-05 10:42 by 88817753
[考研] 290求调剂 +7 luoziheng 2026-04-04 7/350 2026-04-04 23:17 by lqwchd
[考研] 333求调剂 +12 wfh030413@ 2026-04-03 13/650 2026-04-04 21:02 by jj987
[考研] 调剂 +4 是可乐不是可乐 2026-04-04 4/200 2026-04-04 19:41 by 唐沐儿
[考研] 363求调剂 +7 zh096 2026-04-04 7/350 2026-04-04 17:13 by dongzh2009
[考研] 求调剂 +4 15064154688 2026-04-03 5/250 2026-04-03 15:07 by zrongyan
[考研] 081200-11408-276学硕求调剂 +5 崔wj 2026-04-03 5/250 2026-04-03 15:06 by arrow8852
[基金申请] 请问共同通讯和共同一作的认可度问题 10+4 psa1234 2026-04-01 10/500 2026-04-03 11:08 by Kittylucky
[考研] 一志愿山东大学,085600,344 +7 魏子per 2026-04-02 8/400 2026-04-02 21:12 by 百灵童888
[考研] 学硕化学工程与技术,一志愿中国海洋大学320+求调剂 +8 披星河 2026-04-02 8/400 2026-04-02 14:12 by oooqiao
[考研] 一志愿北交大材料工程总分358 +3 cs0106 2026-04-02 5/250 2026-04-02 11:37 by olim
[考研] 求0861交通运输专硕or材料专硕调剂 +4 勒布朗@ 2026-03-31 4/200 2026-04-01 09:54 by 一只好果子?
[考研] 一志愿北京科技大学085601材料工程英一数二初试总分335求调剂 +5 双马尾痞老板2 2026-03-31 5/250 2026-04-01 09:04 by oooqiao
[考研] 269求调剂 +4 我想读研11 2026-03-31 4/200 2026-03-31 10:04 by cal0306
信息提示
请填处理意见