合計 昨日 今日

ベクトルの大きさ

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: tui
[URL]
Date: 2017年10月09日(月) 20:54
No: 1
(OFFLINE)

 ベクトルの大きさ

P´(t)=-3(1-t)²(1,2)+3t(1-t)(1-3t)(2,3)+3t(2-3t)(3,1)+3t²(5,1)

上の式について0.1から1の範囲でtの値を変化させて|P´(t)|を求めたいです

が値が全くでないです。

どのようにしたらいいですか?


コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
#include<iostream>
#include<math.h>
 
double a1, b1, c1, d1, t, a2, b2, c2, d2, x;
 
 
int Qx[4] = { 1,2,3,5 };
int Qy[4] = { 2,3,1,1 };
 
int main()
{
    t = 0;
 
 
    a1 = -3 * (1 - t) * (1 - t) * Qx[0];                a2 = -3 * (1 - t) * (1 - t) * Qy[0];
    b1 = 3 * t * (1 - t) * (1 - 3 * t) * Qx[1];         b2 = 3 * t * (1 - t) * (1 - 3 * t) * Qy[1];
    c1 = 3 * t * (2 - 3 * t) * Qx[2];                   c2 = 3 * t * (2 - 3 * t) * Qy[2];
    d1 = 3 * t * t * Qx[3];                             d2 = 3 * t * t * Qy[3];
 
    for (t = 0; t < 1.0; t = t + 0.1)
    {
 
        double x = (a1*a1 + b1*b1 + 2 * (a1*c1 + a1*b1 + c1*d1 + b1*c1 + a1*d1 + b1*d1) + c1*c1 + d1*d1 + a2*a2 + b2*b2 + 2 * (a2*c2 + a2*b2 + c2*d2 + b2*c2 + a2*d2 + b2*d2) + c2*c2 + d2*d2);
 
        std::cout << sqrt(x) << std::endl;
 
    }
 
 
 
 
 
    return 0;
 
}

Name: みけCAT
[URL]
伝説なるハッカー(685,415 ポイント)
Date: 2017年10月09日(月) 22:03
No: 2
(ONLINE)

 Re: ベクトルの大きさ

C++では、変数の値を変えても変える前にその変数を使った計算の結果を代入した変数には影響を与えません。
新しいtの値で計算をしたければ、各変数をtの更新後に計算するようにしなければいけません。
そうするには、16行目~19行目を23行目に持ってくればいいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Name: rouse
[URL]
Date: 2017年10月09日(月) 22:20
No: 3
(OFFLINE)

 Re: ベクトルの大きさ

[解決!]

みけCAT さんが書きました:C++では、変数の値を変えても変える前にその変数を使った計算の結果を代入した変数には影響を与えません。
新しいtの値で計算をしたければ、各変数をtの更新後に計算するようにしなければいけません。
そうするには、16行目~19行目を23行目に持ってくればいいでしょう。




このコードはとても稚拙だと思いますが、どうかけばきっちりとしたコードになるのでしょうか?

Name: かずま
[URL]
Date: 2017年10月10日(火) 01:14
No: 4
(OFFLINE)

 Re: ベクトルの大きさ

rouse さんが書きました:このコードはとても稚拙だと思いますが、どうかけばきっちりとしたコードになるのでしょうか?

元のコードを活かすと、
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <math.h>
 
int Qx[4] = { 1,2,3,5 };
int Qy[4] = { 2,3,1,1 };
 
int main()
{
    for (double t = 0; t < 1.0; t += 0.1) {
        double a1 = -3 * (1 - t) * (1 - t) * Qx[0];
        double a2 = -3 * (1 - t) * (1 - t) * Qy[0];
        double b1 = 3 * t * (1 - t) * (1 - 3 * t) * Qx[1];
        double b2 = 3 * t * (1 - t) * (1 - 3 * t) * Qy[1];
        double c1 = 3 * t * (2 - 3 * t) * Qx[2];
        double c2 = 3 * t * (2 - 3 * t) * Qy[2];
        double d1 = 3 * t * t * Qx[3];
        double d2 = 3 * t * t * Qy[3];
        double x = a1*a1 + b1*b1
                + 2 * (a1*c1 + a1*b1 + c1*d1 + b1*c1 + a1*d1 + b1*d1)
                + c1*c1 + d1*d1
                + a2*a2 + b2*b2
                + 2 * (a2*c2 + a2*b2 + c2*d2 + b2*c2 + a2*d2 + b2*d2)
                + c2*c2 + d2*d2;
        std::cout << sqrt(x) << std::endl;
    }
    return 0;
}

元のコードとは異なりますが、
次のように書いても同じ結果になります。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cmath>
 
int Qx[4] = { 1, 2, 3, 5 };
int Qy[4] = { 2, 3, 1, 1 };
 
int main()
{
    for (int i = 0; i <= 10; i++) {
        double t = 0.1 * i;
        double x = -3 * (1 - t) * (1 - t) * Qx[0]
                  + 3 * t * (1 - t) * (1 - 3 * t) * Qx[1]
                  + 3 * t * (2 - 3 * t) * Qx[2]
                  + 3 * t * t * Qx[3];
        double y = -3 * (1 - t) * (1 - t) * Qy[0]
                  + 3 * t * (1 - t) * (1 - 3 * t) * Qy[1]
                  + 3 * t * (2 - 3 * t) * Qy[2]
                  + 3 * t * t * Qy[3];
        std::cout << std::sqrt(x*x + y*y) << std::endl;
    }
    return 0;
}


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[11人]