F#を触ってみたのですが

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
weaseve
記事: 29
登録日時: 12年前

F#を触ってみたのですが

#1

投稿記事 by weaseve » 10年前

ラグランジュ補間をやってみようと思って自分なりに調べながら書き書きしてたのですが、どうもよくわからなくなったので

コード:

// Learn more about F# at http://fsharp.org
// See the 'F# Tutorial' project for more help.

let DataX=[|1.0;2.0;3.0;4.0|]
let DataY=[|4.5;5.7;7.3;8.5|]

let rec pi1 x i re j=
    if j==4 then re
    elif i==j then pi1 x i re j+1
    else pi1 x i (re*x-re*DataX.[j]) j+1

let rec pi2 (i re j)=
    if j>==4 then re
    elif i==j then pi2 i re j+1
    else pi2 i re*(DataX.[j]-DataX.[i]) j++

let fl (x i)=
    pi1 x i 1 0 / pi2 i 1 0

let rec Lagrange (x sum i)=
    if i==4 then sum
    else Lagrange x sum+(fl x i) i+1

[<EntryPoint>]
let main argv = 
    printfn "%A\n\n" argv
    printf "%f" Lagrange 1.4 0 0
    
    0 // return an integer exit code

エラーが出たりしたのですが何をどう直せばいいのかよくわからないもので、何がどう間違っているのか

weaseve
記事: 29
登録日時: 12年前

Re: F#を触ってみたのですが

#2

投稿記事 by weaseve » 10年前

更新

コード:

// Learn more about F# at http://fsharp.org
// See the 'F# Tutorial' project for more help.

let DataX=[|1.0;2.0;3.0;4.0|]
let DataY=[|4.5;5.7;7.3;8.5|]

let rec pi x i re j=
    if j==4 then re
    elif i==j then pi x i re j+1
    else pi x i re*(x-DataX.[j]) j+1

let fl x i=
    DataY.[i] * (pi x i 1.0 0) / (pi DataX.[i] i 1.0 0)

let rec Lagrange x sum i=
    if i==4 then sum
    else Lagrange x sum+(fl x i) i+1

[<EntryPoint>]
let main argv = 
    printfn "%A\n\n" argv
    printf "%f" Lagrange 1.4 0.0 0
    
    0 // return an integer exit code

治らず

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: F#を触ってみたのですが

#3

投稿記事 by みけCAT » 10年前

実行結果の正しさは知りませんが、とりあえずコンパイルエラーを潰してみました。

コード:

// Learn more about F# at <!-- m --><a class=\"postlink\" href=\"http://fsharp.org\">http://fsharp.org</a><!-- m -->
// See the 'F# Tutorial' project for more help.
 
let DataX=[|1.0;2.0;3.0;4.0|]
let DataY=[|4.5;5.7;7.3;8.5|]
 
let rec pi x i re j=
    if j=4 then re
    elif i=j then pi x i re (j+1)
    else pi x i (re*(x-DataX.[j])) (j+1)
 
let fl x i=
    DataY.[i] * (pi x i 1.0 0) / (pi DataX.[i] i 1.0 0)
 
let rec Lagrange x sum i=
    if i=4 then sum
    else Lagrange x (sum+(fl x i)) (i+1)
 
[<EntryPoint>]
let main argv = 
    printfn "%A\n\n" argv
    printf "%f" (Lagrange 1.4 0.0 0)
    
    0 // return an integer exit code
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

weaseve
記事: 29
登録日時: 12年前

Re: F#を触ってみたのですが

#4

投稿記事 by weaseve » 10年前

コード:

// Learn more about F# at <!-- m --><a class=\"postlink\" href=\"http://fsharp.org\">http://fsharp.org</a><!-- m -->
// See the 'F# Tutorial' project for more help.
 
let DataX=[|1.0;2.0;3.0;4.0|]
let DataY=[|4.5;5.7;7.3;8.5|]
 
let rec pi x i re j=
    if j=4 then re
    elif i=j then pi x i re (j+1)
    else pi x i (re*(x-DataX.[j])) (j+1)
 
let fl x i=
    DataY.[i] * (pi x i 1.0 0) / (pi DataX.[i] i 1.0 0)
 
let rec Lagrange x sum i=
    if i=4 then sum
    else Lagrange x (sum+(fl x i)) (i+1)

let rec loop n =
    if n>7.0 then 0
    else
        printf "%f : %f\n" n (Lagrange n 0.0 0)
        loop (n+0.1)

[<EntryPoint>]
let main argv = 
    printfn "%A\n\n" argv
    loop 0.0
    
    0 // return an integer exit code
ありがとうございます。上記のものが参考にして正しく動く(C言語で作ったものと同じ動作結果)ものです。
引数に式を入れるときは()で囲まなければならないのですね。あと==ではなく=と書くと。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る