【问题标题】:Half Life Formula ~ Objective-C半条命公式 ~ Objective-C
【发布时间】:2014-04-25 20:48:30
【问题描述】:

Nt = N0e-λt

N0 是初始数量 Nt 是经过时间 t 后仍然剩余的量, t1/2 是半衰期 τ 是平均寿命 λ是衰减常数

我很困惑如何将它变成 Objective-c 的公式,我需要它。

double sourceStart = [textField.text doubleValue];
double sourceNow = 0;
double daysBetween = 8;

if (textField.text.length > 0) {
    //Find how many half lives have been accumulated
    double totalNumberOfHalfLives = daysBetween / sourceHalfLife;
    //Find the factor
    double reductionFactor = pow(0.5, totalNumberOfHalfLives);
    //Find the source strength now
    double sourceNow = sourceStart * reductionFactor;
}

我假设我需要一些很长的东西?或者完全错误。

然后,例如,我还需要能够找出特定天数之间经过了多少天。开始日期 = 4 月 15 日 现在日期 = 4 月 25 日,相隔 10 天.. 我如何在目标 c 中解决这个问题?以及我原来的问题。

【问题讨论】:

  • 你要解决Nt吗?
  • @paulGriffiths 是的,我需要的是 Nt
  • 你有哪些数据?您的问题引用了t1/2τ,但这些不在您的公式中,该公式是从包含它们的版本重新排列的。您是否已经拥有N0λt
  • @PaulGriffiths 我很抱歉,N0 将是 daysBetweenmean lifetime (τ): 36.06737602014 decay constant (λ): 0.027725887224 是 25 的 t1/2 的常量值 t1/2 = ln(2)τ = ln(2)/λ
  • @paulgriffiths 你也可以这样写公式Nt = N0(1/2)t/t1/2

标签: objective-c


【解决方案1】:

这会做到(在纯 C 中,但在 Objective-C 中它会按原样工作,您可以很容易地提取逻辑):

#include <stdio.h>
#include <math.h>

int main(void) {
    double start_quantity = 100;
    double half_life = 8;
    double days = 16;
    double end_quantity = start_quantity * pow(0.5, days / half_life);

    printf("After %.1f days with a half life of %.1f days, %.1f decays to %.1f.\
n",
            days, half_life, start_quantity, end_quantity);

    return 0;
}

和输出:

paul@local:~/src$ ./halflife
After 16.0 days with a half life of 8.0 days, 100.0 decays to 25.0.
paul@local:~/src$ 

对于您问题的第二部分,您可以将日期存储在NSDate 中,并使用timeIntervalSinceDate: 方法获取它们之间的时间(以秒为单位)。像这样的:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{ 
    @autoreleasepool {
        const int kSecsInADay = 86400;

        NSDate * startDate = [NSDate dateWithTimeIntervalSinceNow:-16 * kSecsInADay];
        NSDate * endDate = [NSDate date];

        NSTimeInterval seconds_diff = [endDate timeIntervalSinceDate:startDate];
        double days_diff = seconds_diff / kSecsInADay;

        NSLog(@"There are %.1f days between %@ and %@.", days_diff,
              [startDate description], [endDate description]);
    }
    return 0;
}

哪个输出:

There are 16.0 days between 2014-04-09 21:41:12 +0000 and 2014-04-25 21:41:12 +0000.

注意事项:

  • [NSDate date] 返回一个代表当前时间的NSDate 对象。

  • [NSDate dateWithTimeIntervalSinceNow:seconds] 返回一个距离当前时间 seconds 秒的 NSDate 对象。在这种情况下,我在当前日期前 16 天创建了它。根据 cmets,在您的情况下,您还需要使用 [NSDate date] 创建 startDate,然后将其存储在某处,以便您可以在未来某个时间计算它与当前时间之间的差异。

【讨论】:

  • 这很好用,保罗,非常感谢。在不试图纠缠你的情况下,你有什么想法,或者至少能指出我解决下一个问题的方向吗?那是在计算一组日期之间的天数吗?
  • 取决于您的日期格式。如果您使用的是 Objective-C,并且您在 NSDate 中有它们,那么您需要查看 NSDatetimeIntervalSinceDate:方法,它会给你以秒为单位的差异,你可以很容易地将它转换为天。使用直接 C,您可以查看 difftime() 函数。
  • 显然,如果您实际上没有来自某个地方的日期,而只是想创建它们,则需要在执行此操作之前填充一个 NSDate 或一个 struct tm 或两个。如果你让我知道你需要怎么做,我可以给你一个例子。
  • 基本上,有人会通过放入其当前强度来创建他们的“源”,该值将被保存,日期最有可能在 userdefaults 可变数组中,因此它将根据什么来获取日期他们的 ios 所在的日期,然后当他们检查衰减时,它会根据他们当前的日期与他们保存的日期告诉他们。
  • 好的,所以在这两种情况下,日期只是来自当前时间,只是在两个不同的时间?给我几分钟的时间来拼凑一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多