24小时热门版块排行榜    

Znn3bq.jpeg
查看: 2513  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 国自然面上和省基金B类撒花 +16 花田半亩~白 2026-04-21 16/800 2026-04-23 03:04 by 魅力紫翼
[考研] 有没有学校收留 +3 蒋昌鹏qtj 2026-04-20 3/150 2026-04-22 20:25 by 学员JpLReM
[考博] 华师大读博 +3 xq83 2026-04-22 5/250 2026-04-22 10:42 by xq83
[教师之家] 又一批高校组建人工智能学院 师资行吗 不是骗人吗 +5 yexuqing 2026-04-19 5/250 2026-04-22 10:01 by easeheart
[论文投稿] 急需审稿人!!! +3 陆小果画大饼 2026-04-21 3/150 2026-04-21 23:54 by jzy_123456
[考博] 申博/考博 +4 啃面包的小书虫 2026-04-17 8/400 2026-04-21 16:26 by 啃面包的小书虫
[考研] 295分求调剂 +6 ?要上岸? 2026-04-17 6/300 2026-04-21 08:18 by Equinoxhua
[考研] 085600材料与化工调剂 5+3 孜孜不倦2002 2026-04-19 6/300 2026-04-20 21:25 by babero
[论文投稿] 有没有接收比较快的sci期刊呀,最好在一个月之内的,研三孩子求毕业 20+4 之护着 2026-04-16 7/350 2026-04-20 15:45 by 豆豆7758
[考研] 337求调剂 +3 jyz04 2026-04-18 3/150 2026-04-20 12:24 by 研可安
[考博] 申博 +3 Xyyx. 2026-04-18 3/150 2026-04-20 10:44 by YuY66
[考博] 湖南大学刘巧玲课题组2026年第二批次博士研究生招生信息 +3 南风观火 2026-04-18 5/250 2026-04-20 10:13 by 南风观火
[考研] 求计算机方向调剂 +3 Toffee2 2026-04-16 6/300 2026-04-19 22:37 by ll叶
[考研] 294求调剂 +8 淡然654321 2026-04-17 9/450 2026-04-19 19:51 by Equinoxhua
[考研] 304求调剂 +8 castLight 2026-04-16 8/400 2026-04-19 17:14 by 中豫男
[考研] 求调剂 +10 小聂爱学习 2026-04-16 12/600 2026-04-19 16:51 by 中豫男
[考研] 接受任何调剂 +6 也就是栗子 2026-04-17 7/350 2026-04-18 17:20 by 涵竹刘
[考研] 收到复试调剂但是去不了 +8 小蜗牛* 2026-04-16 8/400 2026-04-18 11:15 by zixin2025
[有机交流] 二苯甲酮酸类衍生物 50+3 小白爱主人 2026-04-17 6/300 2026-04-17 18:47 by kf2781974
[考研] 322求调剂 +6 tekuzu 2026-04-17 6/300 2026-04-17 13:48 by Espannnnnol
信息提示
请填处理意见