标题:学校里没一个人会的问题,速求解答!!
只看楼主
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
得分:0 
回复 9楼 beyondyf
用牛顿迭代法怎么算的,圆台体积公式是关于高度的一次函数啊,求导出来不就是常数了吗?

[ 本帖最后由 waterstar 于 2011-12-3 20:55 编辑 ]

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-12-03 20:34
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
就这个问题不能直接用圆台公式求的。
因为你的已知条件是体积V,底面半径r,及侧面的斜率。圆台的高和顶面是未知的。当然它们之间存在一个二次关系。
所以你要解的是一个二元二次方程组。
而我直接推导体积与高的函数关系,是一个一元三次函数。一个多项式而已。导函数是一个二次多项式。
代码也直接给你吧。
程序代码:
#include<stdio.h>
#define PI    3.1415926535897932384626433832795
#define MIN    0.0000001
double a, b, c, d;
double da, db, dc;
double f(double x)
{
    double xx, xxx;
    xx = x * x;
    xxx = xx * x;
    return a * xxx + b * xx + c * x + d;
}
double df(double x)
{
    return da * x * x + db * x  + dc;
}
void init(double r, double R, double H, double V)
{
    double k;
    k = (R - r) / H;
    a = k * k / 3;
    b = k * r;
    c = r * r;
    d = -V / PI;
    da = a * 3;
    db = b * 2;
    dc = c;
}
double cal(double r, double R, double H, double V)
{
    double x0, x1;
    init(r, R, H, V);
    x0 = 0;
    x1 = x0 - f(x0) / df(x0);
    while(fabs(x1 - x0) >= MIN)
    {
        x0 = x1;
        x1 = x0 - f(x0) / df(x0);
    }
    return x1;
}
int main()
{
    int T;
    double r, R, H, V, h;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%lf%lf%lf%lf", &r, &R, &H, &V);
        h = cal(r, R, H, V);
        if(h > H) h = H;
        printf("%.6f\n", h);
    }
    return 0;
}

重剑无锋,大巧不工
2011-12-03 21:10
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
得分:0 
利用高和上底面半径的关系就能列出二次方程了,再用牛顿迭代?


[ 本帖最后由 waterstar 于 2011-12-4 17:05 编辑 ]

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-12-04 17:01
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
三次方程,反正我是不记得通解的公式,对于高次方程从上学时就是用迭代法求近似解的。

重剑无锋,大巧不工
2011-12-04 20:38
zz199200
Rank: 1
等 级:新手上路
帖 子:18
专家分:2
注 册:2011-11-26
得分:0 
不好意思,不知道为什么自动结贴了;分没给对的请见谅
2011-12-25 21:39
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
得分:0 
非科班出身
看到英文描述的题目就头疼。。。
2011-12-25 23:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-356802-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.082494 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved