ページ 1 / 1
f=X^(-(t1)) + X^(-(t2)) + ... + X^(-(tn))の定義の仕方
Posted: 2019年10月17日(木) 21:10
by nonteas
X^(-(t1)) + X^(-(t2)) + ... + X^(-(tn))をfという変数で定義したいです.
t1からtnは配列に実数値で読みこんでおります.
f = X^(1.5) + X^(2.0) + X^(1.0)
のようにしたいのですが,プログラムの書き方が分かりません.
ご教授お願い致します.
Re: f=X^(-(t1)) + X^(-(t2)) + ... + X^(-(tn))の定義の仕方
Posted: 2019年10月17日(木) 22:46
by みけCAT
プログラミング言語が指定されていないようですが、例えばC++であればこのような感じでしょうか?
コード:
#include <iostream>
#include <iomanip>
#include <vector>
#include <string>
#include <sstream>
#include <cmath>
class siki {
// t1からtnを格納する
std::vector<double> t;
public:
siki() {}
// t1からtnの配列に基づき式を初期化する
siki(const double* array, size_t n) : t(array, array + n) {}
// Xに値を代入して式を計算する
double operator()(double X) const {
// 合計を格納する
double ret = 0;
// 各要素について処理する
for (std::vector<double>::const_iterator itr = t.begin(); itr != t.end(); itr++) {
// *itr で各要素を取得できる
// X^(-(t1)) + ... の形式に合わせるため、マイナスをつける
ret += pow(X, -*itr);
}
return ret;
}
// 式を文字列に変換する
std::string str() const {
bool first = true;
std::stringstream ss;
// 小数点以下を1桁固定で出力するようにする
ss << std::fixed << std::setprecision(1);
// 各要素について処理する
for (std::vector<double>::const_iterator itr = t.begin(); itr != t.end(); itr++) {
// 2番目以降の項の前に " + " を挿入する
if (!first) ss << " + ";
first = false;
// 項を文字列に変換する
// *itr で各要素を取得できる
// X^(-(t1)) + ... の形式に合わせるため、マイナスをつける
ss << "X^(" << -*itr << ")";
}
return ss.str();
}
};
// std::cout << f の形で出力できるようにする
std::ostream& operator<<(std::ostream& stream, const siki& value) {
stream << value.str();
return stream;
}
int main(void) {
// t1からtnを読み込んである配列
double t[] = {-1.5, -2.0, -1.0};
// fという変数で定義する
siki f(t, sizeof(t) / sizeof(*t));
// 式を出力する
std::cout << "f = " << f << std::endl;
// 値を代入してみる
double X[] = {0.1, 0.5, 1.0, 1.5, 2.0, 3.0, 5.0};
for (size_t i = 0; i < (sizeof(X) / sizeof(*X)); i++) {
std::cout << "f(" << X[i] << ") = " << f(X[i]) << std::endl;
}
return 0;
}
実行結果
コード:
f = X^(1.5) + X^(2.0) + X^(1.0)
f(0.1) = 0.141623
f(0.5) = 1.10355
f(1) = 3
f(1.5) = 5.58712
f(2) = 8.82843
f(3) = 17.1962
f(5) = 41.1803
Re: f=X^(-(t1)) + X^(-(t2)) + ... + X^(-(tn))の定義の仕方
Posted: 2019年10月17日(木) 23:08
by nonteas
みけCAT 様
C言語で記述することは可能でしょうか.
可能でしたら宜しくお願い致します.
Re: f=X^(-(t1)) + X^(-(t2)) + ... + X^(-(tn))の定義の仕方
Posted: 2019年10月18日(金) 22:09
by みけCAT
プログラムはやりたいことに合わせて書くのがいいと思います。
「X^(-(t1)) + X^(-(t2)) + ... + X^(-(tn))をfという変数で定義」
「f = X^(1.5) + X^(2.0) + X^(1.0) のように」
とはどういうことか、もう少し詳しく教えていただけますか?
Re: f=X^(-(t1)) + X^(-(t2)) + ... + X^(-(tn))の定義の仕方
Posted: 2019年10月19日(土) 19:19
by かずま
質問が間違っているような気がします。
課題として与えられているのなら、それを一字一句変更せずに
そのまますべて書いてください。
また、t1からtnは配列に実数値で読みこむコードを提示してください。
次のコードは期待するものでしょうか?
コード:
#include <stdio.h> // printf
#include <math.h> // pow
double t[] = { -1.5, -2.0, -1.0 };
int n = sizeof t / sizeof t[0];
double F(double X)
{
double v = 0;
for (int i = 0; i < n; i++) v += pow(X, -t[i]);
return v;
}
int main(void)
{
double (*f)(double) = F; // f は変数
printf("%f\n", f(2.5)); // X に 2.5 を与えてみた
}
Re: f=X^(-(t1)) + X^(-(t2)) + ... + X^(-(tn))の定義の仕方
Posted: 2019年10月21日(月) 20:10
by あたっしゅ
f=X^(-(t1)) + X^(-(t2)) + ... + X^(-(tn))
の元の記述は、
f=X-t1+X-t2+X-t3+...+X-tn
でしょうか ?
とりあえず、式を書くだけで疲れたので、今日は、ここまで。