cad890 发表于 2019-7-2 18:05:46

cad890 发表于 2019-7-1 18:24
既然你这公式都有推论了,直接利用公式计算就可以了。n取得越大,结果越精确。单次循环累加求和就是了。
...

红色矩形所圈示不就是推论吗?

ynhh 发表于 2019-7-2 19:52:34

cad890 发表于 2019-7-2 18:05
红色矩形所圈示不就是推论吗?

谢谢您
我太笨了
真不好意思
公式中的符号
i   n 都不知是什么意思
谢谢您了
我再看看
不行就放弃了
不好意思麻烦您们

ynhh 发表于 2019-7-3 08:37:17

cad890 发表于 2019-7-2 18:05
红色矩形所圈示不就是推论吗?

如您方便帮助写出实例
我发了个50明经币悬赏
请您看看
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=179815&page=1#pid844524
谢谢

ynhh 发表于 2019-7-3 08:38:23

highflybird 发表于 2019-7-2 12:45
譬如这个求椭圆弧长的例子,就是采用了龙贝格积分。
只要你把积分的函数代入,然后代入下限上限值,就 ...

如高飞大师方便帮助写出实例
我发了个50明经币悬赏
请您看看
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=179815&page=1#pid844524
无论如何都向您表示感谢

cad890 发表于 2019-7-3 12:55:02

本帖最后由 cad890 于 2019-7-3 13:00 编辑

ynhh 发表于 2019-7-3 08:37
如您方便帮助写出实例
我发了个50明经币悬赏
请您看看

利用推论就仅局限于这个例子,不像高大师的,比较通用。
下面就是一个大概步骤,您自己补全即可。当然,要写出完美的程序,还要增加许多限制条件,如hb不能大于b等等情况。
h,B(t),F(t),f(t),xi每一个字符的含义都在图上可以找到 。
∑就是累加的意思,n就是划分的份数,n越大,精度越高。
i就是中间值;积分累加计算这些值
见下: (setq i 1 pi 3.141592653h (/ (float hb) c) s 0)
(repeat n
(setq wi (/ pi n)
      ai   (* pi (/ (- (* 2 i) 1) (* 2 n)))
         xi(cos ai)
         B (…)
         F (…)
)
(if (= F 0) (setq F …))
(为了避免程序又臭又长,可以增加中间计算)
(setq f (…))
(setq si (* b c h wi f))
(setq s (+ s si))
(setq i (1+ i))
)




ynhh 发表于 2019-7-3 14:14:53

cad890 发表于 2019-7-3 12:55
利用推论就仅局限于这个例子,不像高大师的,比较通用。
下面就是一个大概步骤,您自己补全即可。当然, ...

我这怎么研究都不对
(setq a 2.0 b 3.0 c 4.0 hc 3.0);已知
(setq hb (- c hc))
(setq n 100)
(setq i 1h (/ (float hb) c) s 0)
(repeat n
(setq wi (/ pi n)
      ai   (* pi (/ (- (* 2 i) 1) (* 2 n)))
         xi(cos ai)
;;;         B (…)
;;;         F (…)
)
(setq B (- 1.0 (* (- 1.0 (/ (* A A) (* B B))) 1.0)))
(setq F (1- (* (* (/ (* A A) (* C C))) (/ 1.0 B)) ))

(if (= F 0) F)
;;;(为了避免程序又臭又长,可以增加中间计算)
(setq f (1- (* (* (/ (* A A) (* C C))) (/ 1.0 B)) ))
(setq si (* b c h wi f))
(setq s (+ s si))
(setq i (1+ i))
)
s
谢谢您了
等有热心人在悬赏处做出这个实例来时
我就学习一下
如没有就算了,我这也只是爱好,与任何工作都无关的,不会也不影响什么。
再次感谢您的多次指导。

cad890 发表于 2019-7-3 19:42:19

本帖最后由 cad890 于 2019-7-3 20:03 编辑

ynhh 发表于 2019-7-3 14:14
我这怎么研究都不对
(setq a 2.0 b 3.0 c 4.0 hc 3.0);已知
(setq hb (- c hc))

你这公式推论好像有错误,按理说F(t)应该不会小于0的,但是计算过程发现F(t)会存在小于0的情况;
如n=100时,xi≈cos(1/200 * pi)≈1,则B(t)≈a^2/b^2, F(t)≈b^2/c^2-1,如果b小于c,会计算出F(t)<0。由于存在F(t)开方,所以下方函数是无法计算下去的。请核实一下公式推论F(t)。
但如果a=b=c,hc=0时,可以计算。即半球面积

注:我中午列的公式是根据图片符号,区分大小写,lisp变量不区分大小写,所以你有很多变量重复了。

(defun c:tt()
(setq a 2.0 b 3.0 c 4.0 hc 3.0);已知
(setq hb (- c hc))
(setq n 100)
(setq i 1h (/hb c) s 0)
(repeat n
(setq wi (/ pi n)
      ai   (* pi (/ (- (* 2.0 i) 1) (* 2.0 n)))
         xi(cos ai)
;;;         B (…)
;;;         F (…)
)
(setq Bt (- 1.0 (* (- 1.0 (/ (* a a) (* b b))) xi xi) ))
(setq Ft (- (/ (* a a) (* c c) Bt) 1))

(if (= Ft 0) (setq f (* 2 h (/ a c)))
;;;(为了避免程序又臭又长,可以增加中间计算)
;;;(setq f (1- (* (* (/ (* A A) (* C C))) (/ 1.0 B)) ))
(progn
(setq sqrtBt (sqrt Bt))
(setq sqrtFh (sqrt (1+ (* Ft h h))))
(setq hsqrtF (* h (sqrt Ft)))
(setq sinh-1 (arcsinh hsqrtF))
(setq f (* sqrtBt (+ sqrtFh (/ sinh-1 hsqrtF )))))
);end_if
(setq si (* b c h wi f))
(setq s (+ s si))
(setq i (1+ i))
)
s
)
(defun arcsinh(x);sinh-1
(log (+ x (sqrt (1+ (* x x)))));ln(x + sqrt(x^2 + 1))
)



ynhh 发表于 2019-7-3 20:31:58

cad890 发表于 2019-7-3 19:42
你这公式推论好像有错误,按理说F(t)应该不会小于0的,但是计算过程发现F(t)会存在小于0的情况;
如n=10 ...

公式是外国网站上介绍的
我还没这能力
可能你引用的公式不对,是另一个
目前你这LISP运行后
错误: 没有为参数定义函数: -0.437673

ynhh 发表于 2019-7-3 20:32:58

你用的图可能不对,你试试这个图中的公式看

应是这个图中的公式http://bbs.mjtd.com/data/attachment/forum/201907/01/101052f8llb8709atbg8t8.gif


cad890 发表于 2019-7-4 18:18:10

本帖最后由 cad890 于 2019-7-4 18:21 编辑

ynhh 发表于 2019-7-3 20:32
你用的图可能不对,你试试这个图中的公式看

应是这个图中的公式
应该是图片化简过程出错了,绿色线框处积分化简使用条件为a>0,即F>0;
而F不能保证大于0(如φ=0时,B=1;若a<c,则F<0);看来推论不可用,还是考虑高大师的通用积分程序吧。或者自己化简。




常用积分公式如下:
页: 1 [2] 3
查看完整版本: LISP的积分问题